package com.zff.wechat.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class GetImage {

	private static final Log LOG = LogFactory.getLog(GetImage.class);
	
	// 创建目录
	public static boolean createDir(String destDirName) {
		File dir = new File(destDirName);
		if (dir.exists()) {// 判断目录是否存在
			LOG.info("创建目录失败，目标目录已存在！");
			return false;
		}
		if (!destDirName.endsWith(File.separator)) {// 结尾是否以"/"结束
			destDirName = destDirName + File.separator;
		}
		if (dir.mkdirs()) {// 创建目标目录
			LOG.info("创建目录成功！" + destDirName);
			return true;
		} else {
			LOG.info("创建目录失败！");
			return false;
		}
	}

	/**
	 * 将图片写入到磁盘
	 * 
	 * @param img
	 *            图片数据流
	 * @param fileName
	 *            文件保存时的名称
	 */
	public static void writeImageToDisk(byte[] img, String fileName) {
		try {
//			boolean isCreate = createDir("E:\\aliyunImage");
//			if (isCreate) {
			File file = new File("G:\\aliyunImage\\" + fileName);
			FileOutputStream fops = new FileOutputStream(file);
			fops.write(img);
			fops.flush();
			fops.close();
			LOG.info("图片已经写入到G盘");
//			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据地址获得数据的字节流
	 * 
	 * @param strUrl
	 *            网络连接地址
	 * @return
	 */
	public static byte[] getImageFromNetByUrl(String strUrl) {
		try {
			URL url = new URL(strUrl);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setConnectTimeout(5 * 1000);
			InputStream inStream = conn.getInputStream();// 通过输入流获取图片数据
			byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据
			return btImg;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 从输入流中获取数据
	 * 
	 * @param inStream
	 *            输入流
	 * @return
	 * @throws Exception
	 */
	public static byte[] readInputStream(InputStream inStream) throws Exception {
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = inStream.read(buffer)) != -1) {
			outStream.write(buffer, 0, len);
		}
		inStream.close();
		return outStream.toByteArray();
	}
	
	 public static void main(String[] args) {  
	        String url = "http://mmbiz.qpic.cn/mmbiz_jpg/2iboBY0iczGJArffO4TnibM9AIKgjicnvObmkichNXPWmPDsNtbTtNI04YagwRiaPYOxAqBB3EcWH0MicJ3icIwUZS8iang/0";  
	        byte[] btImg = getImageFromNetByUrl(url);  
	        if(null != btImg && btImg.length > 0){  
	            System.out.println("读取到：" + btImg.length + " 字节");  
	            String fileName = "baidu.gif";  
	            writeImageToDisk(btImg, fileName);  
	        }else{  
	            System.out.println("没有从该连接获得内容");  
	        }  
	    }  
}
